package com.baizhi.shane.shane.service;

import com.baizhi.shane.shane.entity.ShaneEssay;
import com.baizhi.shane.shane.vo.*;
import com.baizhi.shane.sys.vo.IdVO;
import com.baizhi.shane.sys.vo.SuccessedOutVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author wbz12
* @description 针对表【shane_essay(啥呢文章表)】的数据库操作Service
* @createDate 2023-07-25 22:33:37
*/
public interface ShaneEssayService extends IService<ShaneEssay> {

    /**
     * 通过关键字模糊查询文章列表
     *
     * @Author 闻柏智
     * @Date 16:18 2024/3/2
     * @Param pageInVO
     * @return java.util.List<com.baizhi.shane.shane.vo.PageEssayOutVO>
     **/
    List<PageEssayOutVO> pageByContent(PageInVO pageInVO);

    /**
     * 通过文章ID列表查询这些文章的点赞数量
     *
     * @Author 闻柏智
     * @Date 20:28 2024/1/21
     * @Param essayIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getEssayLikeCountByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID查询单个文章的点赞数量
     *
     * @Author 闻柏智
     * @Date 20:35 2024/1/21
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneEssayLikeCountByEssayId(Long essayId);

    /**
     * 通过文章ID列表查询这些文章的点赞数量，并且转化成Map
     *
     * @Author 闻柏智
     * @Date 20:36 2024/1/21
     * @Param questionIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getEssayLikeCountMapByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID列表查询这些文章的反对数量
     *
     * @Author 闻柏智
     * @Date 21:01 2024/1/21
     * @Param essayIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getEssayAgainstCountByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID查询单个文章的反对数量
     *
     * @Author 闻柏智
     * @Date 21:03 2024/1/21
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneEssayAgainstCountByEssayId(Long essayId);

    /**
     * 通过文章ID列表查询这些文章的点赞数量，并且转化成Map
     *
     * @Author 闻柏智
     * @Date 21:04 2024/1/21
     * @Param essayIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getEssayAgainstCountMapByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID列表查询这些文章的收藏数量
     *
     * @Author 闻柏智
     * @Date 15:27 2024/1/22
     * @Param essayIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getEssayCollectCountByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID列表查询这些文章的收藏数量，并且转为Map
     *
     * @Author 闻柏智
     * @Date 15:29 2024/1/22
     * @Param essayIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getEssayCollectCountMapByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID查询单个文章的收藏数量
     *
     * @Author 闻柏智
     * @Date 15:33 2024/1/22
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneEssayCollectCountByEssayId(Long essayId);

    /**
     * 通过文章ID列表查询这些文章的评论数量
     *
     * @Author 闻柏智
     * @Date 15:37 2024/1/22
     * @Param essayIdList
     * @return java.util.List<com.baizhi.shane.shane.vo.CountVO>
     **/
    List<CountVO> getEssayCommentCountByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID列表查询这些文章的评论数量，并且转成Map
     *
     * @Author 闻柏智
     * @Date 15:39 2024/1/22
     * @Param essayIdList
     * @return java.util.Map<java.lang.Long,com.baizhi.shane.shane.vo.CountVO>
     **/
    Map<Long, CountVO> getEssayCommentCountMapByEssayIdList(List<Long> essayIdList);

    /**
     * 通过文章ID列表查询这些文章的评论数量
     *
     * @Author 闻柏智
     * @Date 15:40 2024/1/22
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.CountVO
     **/
    CountVO getOneEssayCommentCountByEssayId(Long essayId);

    /**
     * 通过ID查询单个文章信息
     *
     * @Author 闻柏智
     * @Date 16:21 2024/2/29
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.GetOneEssayOutVO
     **/
    GetOneEssayOutVO getOneEssayById(Long essayId);

    /**
     * 新增一个文章
     *
     * @Author 闻柏智
     * @Date 16:27 2024/3/2
     * @Param essayInsertInVO
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO insertOne(EssayInsertInVO essayInsertInVO);

    /**
     * 我发布过的文章
     *
     * @Author 闻柏智
     * @Date 21:35 2024/3/3
     * @Param
     * @return java.util.List<com.baizhi.shane.shane.entity.ShaneEssay>
     **/
    List<ShaneEssay> myPosted();

    /**
     * 通过ID编辑文章
     *
     * @Author 闻柏智
     * @Date 22:44 2024/3/3
     * @Param shaneEssay
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO updateOneById(ShaneEssay shaneEssay);

    /**
     * 我收藏的文章
     *
     * @Author 闻柏智
     * @Date 14:36 2024/3/4
     * @Param
     * @return java.util.List<com.baizhi.shane.shane.entity.ShaneEssay>
     **/
    List<ShaneEssay> myCollected();

    /**
     * 通过文章ID列表查询这些文章的标签列表
     *
     * @Author 闻柏智
     * @Date 15:42 2024/3/4
     * @Param idListStr
     * @return java.util.List<com.baizhi.shane.shane.vo.EssayLabelOutVO>
     **/
    List<EssayLabelOutVO> getEssayLabelListByEssayIdList(String idListStr);

    /**
     * 通过文章ID查询单个文章的标签
     *
     * @Author 闻柏智
     * @Date 15:44 2024/3/4
     * @Param essayId
     * @return com.baizhi.shane.shane.vo.EssayLabelOutVO
     **/
    EssayLabelOutVO getEssayLabelByEssayId(Long essayId);

    /**
     * 通过关键字查询文章列表的元素数量和分页个数
     *
     * @Author 闻柏智
     * @Date 16:01 2024/3/4
     * @Param pageInVO
     * @return com.baizhi.shane.shane.vo.CountAndPageOutVO
     **/
    CountAndPageOutVO countAndPageByContent(PageInVO pageInVO);

    /**
     * 删除一个文章-通过ID
     *
     * @Author 闻柏智
     * @Date 16:15 2024/3/4
     * @Param idVO
     * @return com.baizhi.shane.sys.vo.SuccessedOutVO
     **/
    SuccessedOutVO deleteOneEssayById(IdVO idVO);
}
